/******************************************************************
*
*	CyberXML for Java
*
*	Copyright (C) Satoshi Konno 2002-2003
*
*	File: XML.java
*
*	Revision;
*
*	01/05/03
*		- first revision.
*	12/15/03
*		- Terje Bakken
*		- Added escapeXMLChars()
*	
******************************************************************/

package org.cybergarage.xml;

public class XML 
{
	public final static String CONTENT_TYPE = "text/xml; charset=\"utf-8\"";

	////////////////////////////////////////////////
	// escapeXMLChars
	////////////////////////////////////////////////
	
	private final static String escapeXMLChars(String input, boolean quote) 
	{
		StringBuffer out = new StringBuffer();
		if (input == null)
			return null;
		int oldsize=input.length();
		char[] old=new char[oldsize];
		input.getChars(0,oldsize,old,0);
		int selstart = 0;
		String entity=null;			
		for (int i=0;i<oldsize;i++) {			
			switch (old[i]) {
			case '&': entity="&amp;"; break;				
			case '<': entity="&lt;"; break;
			case '>': entity="&gt;"; break;
			case '\'': if (quote) { entity="&apos;"; break; } 
      case '"': if (quote) { entity="&quot;"; break; }
			}
			if (entity != null) {
				out.append(old,selstart,i-selstart);
				out.append(entity);
				selstart=i+1;
				entity=null;											 
			}
		}
		if (selstart == 0)
			return input;
		out.append(old,selstart,oldsize-selstart);
		return out.toString();	
	}

	public final static String escapeXMLChars(String input)
	{
		return escapeXMLChars(input, true);
	}

  /**
   * Append an XML element line to the string buffer (including a newline)
   *
   * Added string ends up looking like:
   * 
   *   <elemName>Value</elemName>
   *
   * @param  prefix    Prefix - typically used for string of spaces to 
   *                   delineate indent level. 'null' means don't use indent
   * @name   
   * @value
   *
   */   
  public final static void appendXMLElementLine( StringBuffer buf,
                                                 String prefix,
                                                 String name, String value )
  {
    if( prefix != null )
      buf.append( prefix );

    buf.append( "<" + name + ">" + XML.escapeXMLChars(value) +
                "</" + name + ">\n" );
  }

}

